/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package carrancao.repositorio;

import carrancao.conexao.HibernateUtil;
import carrancao.entidades.Endereco;
import carrancao.entidades.Usuario;
import carrancao.util.CriptografiaUtil;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Lubnnia
 */
public class UsuarioRepositorio {

    public UsuarioRepositorio() {

    }

    public void cadastrarUsuario(Usuario u) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       Transaction trans = session.beginTransaction();

       trans.begin();
       session.save(u);
       trans.commit();
       session.close();

    }

    public void deletarUsuario(Usuario u) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       Transaction trans = session.beginTransaction();

       trans.begin();
       session.delete(u);
       trans.commit();
       session.close();

    }

    public void alterarUsuario(Usuario u) {

       Session session = null;

       if(HibernateUtil.getSessionFactory().openSession().isConnected()){
            HibernateUtil.getSessionFactory().close();
       }
       session = HibernateUtil.getSessionFactory().openSession();

       Usuario usuario = this.pesquisarUsuarioPorID(u.getIdusuario());

       u.setIdusuario(usuario.getIdusuario());
       Transaction trans = session.beginTransaction();

       trans.begin();
       session.update(u);
       trans.commit();
       session.close();

    }

    public Usuario pesquisarUsuarioPorID(int id) {

      Session session = HibernateUtil.getSessionFactory().openSession();

      Usuario usuario = null;

      SQLQuery query = session.createSQLQuery("SELECT {usuario.*} FROM usuario" +
              " {usuario} WHERE idusuario = '" + id + "' ");

      query.addEntity("usuario", Usuario.class);

      if(query.list().size() > 0) {
          usuario = (Usuario) query.list().get(0);
          UsuarioRepositorio.initialize(usuario);
      }

      session.close();

      return usuario;

    }

    public List pesquisarUsuarioTodos() {

      Session session = HibernateUtil.getSessionFactory().openSession();

      List usuario = null;

      SQLQuery query = session.createSQLQuery("SELECT {usuario.*} FROM usuario" +
              " {usuario}");

      query.addEntity("usuario", Usuario.class);

      usuario = query.list();

      for(Object o: usuario){
          UsuarioRepositorio.initialize((Usuario) o);
      }

      session.close();

      return usuario;

    }

    public List pesquisarUsuarioPorNome(String nomeUsuario) {

       Session session = HibernateUtil.getSessionFactory().openSession();

       List lista = null;

       Usuario usuario = null;

       SQLQuery query = session.createSQLQuery("SELECT {Usuario.*} FROM Usuario" +
               " {Usuario} WHERE nome like '%" + nomeUsuario + "%'");

       query.addEntity("Usuario", Usuario.class);

       lista = query.list();

       for(Object o: lista){
           UsuarioRepositorio.initialize((Usuario) o);
       }

       session.close();

       return lista;

    }

    public Usuario validarLoginUsuario(String login, String senha) {

        Session session = HibernateUtil.getSessionFactory().openSession();

        Usuario usuario = null;

        SQLQuery query = session.createSQLQuery("SELECT {Usuario.*} FROM Usuario" +
               " {Usuario} where login = '" + login + "' and senha = '" + CriptografiaUtil.criptografar(senha) + "'");

       query.addEntity("Usuario", Usuario.class);

       if(query.list().size() > 0) {
           usuario = (Usuario) query.list().get(0);
           UsuarioRepositorio.initialize(usuario);
       }

       return usuario;

    }

    private static void initialize(Usuario usuario){
         Hibernate.initialize(usuario);
         Hibernate.initialize(usuario.getVendases());
    }

}
